package com.it;

import com.it.concurrency.example.threadLocal.RequestHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 一次请求本来就只filter一次，为什么还要由此特别限定呢？ 往往我们的常识和实际的实现并不真的一样，
 * 经过一番资料的查阅，此方法是为了兼容不同的web container 也就是说并不是所有的container都入
 * 我们期望的只过滤一次，servlet版本不同，执行过程也不同 因此，为了兼容各种不同运行环境和版本，
 * 默认filter继承OncePerRequestFilter是一个比较稳妥的选择。
 * @author youhui
 */
@Slf4j
public class HttpInterceptor extends HandlerInterceptorAdapter {


    // 在业务处理器处理请求之前被调用
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("preHandle");
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        RequestHolder.remove();
        log.info("afterCompletion");
        return;
    }
}
